﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using TAM_SPORT;
using APA_DAO;
using APA_DAO.Entities;
using DAO;

namespace AMS
{
    public partial class FrmThuePhong : Form
    {
        private int soPhong = 0;
        private DataTable RoomTable = null;
        public FrmThuePhong()
        {
            InitializeComponent();
            rdoMale.Checked = true;
            loadPhong();
            txtStartDate.Text = DateTime.Now.ToString("dd/MM/yyyy");
            txtNgayThue.Text = DateTime.Now.ToString("dd/MM/yyyy");
            Count();
            this.BackColor = Color.LightCyan;
            dtgCustomer.ColumnHeadersDefaultCellStyle.BackColor = Color.LightSkyBlue;
            dtgCustomer.GridColor = Color.BurlyWood;
            dtgCustomer.EnableHeadersVisualStyles = false;
            dtgMotos.ColumnHeadersDefaultCellStyle.BackColor = Color.LightSkyBlue;
            dtgMotos.GridColor = Color.BurlyWood;
            dtgMotos.EnableHeadersVisualStyles = false;
        }

        public FrmThuePhong(int sophong)
        {
            InitializeComponent();
            rdoMale.Checked = true;
            loadPhong();
            this.soPhong = sophong;
            cbxRoom.SelectedValue = sophong;
            cbxRoom.Enabled = false;
            txtStartDate.Text = DateTime.Now.ToString("dd/MM/yyyy");
            txtNgayThue.Text = DateTime.Now.ToString("dd/MM/yyyy");
            Count();
            this.BackColor = Color.LightCyan;
            dtgCustomer.ColumnHeadersDefaultCellStyle.BackColor = Color.LightSkyBlue;
            dtgCustomer.GridColor = Color.BurlyWood;
            dtgCustomer.EnableHeadersVisualStyles = false;
            dtgMotos.ColumnHeadersDefaultCellStyle.BackColor = Color.LightSkyBlue;
            dtgMotos.GridColor = Color.BurlyWood;
            dtgMotos.EnableHeadersVisualStyles = false;
        }

        private void loadPhong()
        {
            PhongDao dao = new PhongDao();
            DataTable table = dao.getPhongs(string.Empty, 1);
            if (table != null && table.Rows.Count >0)
            {
                cbxRoom.DataSource = table;
                cbxRoom.DisplayMember = "SO_PHONG";
                cbxRoom.ValueMember = "ID";
                cbxRoom.SelectedIndex = 0;
                RoomTable = table;
                txtDonGiaPhong.Text = float.Parse(table.Rows[0]["DON_GIA"].ToString()).ToString("#,###.##");
            }
        }

        private void Count()
        {
            float roomPrice = 0;
            float.TryParse(txtDonGiaPhong.Text.Replace(",",""), out roomPrice);

            int months = (int)nbSoThang.Value;

            float preCost = 0;
            float.TryParse(txtTienDacCoc.Text.Replace(",", ""), out preCost);

            float total = roomPrice * months + preCost;
            txtTotal.Text = total.ToString("#,###.##");
        }
        private void btnCapture_Click(object sender, EventArgs e)
        {
            Capture f = new Capture();
            f.ShowDialog();
            loadImageCapture(f.Filename);
            f.Dispose();
        }

        public void loadImageCapture(string filename)
        {
            string path = filename;
            if (!String.IsNullOrEmpty(path))
            {
                try
                {
                    ptCusImage.Load(path);
                    ptCusImage.SizeMode = PictureBoxSizeMode.Zoom;
                    ptCusImage.Text = filename;
                }
                catch (Exception ex)
                {
                    ptCusImage.Image = null;
                    Console.WriteLine(ex);
                }
            }
        }

        private void btnBrows_Click(object sender, EventArgs e)
        {
            DialogResult result = customerOpenFileDialog.ShowDialog();
            string hinhBenhNhanStr = "";
            if (result != DialogResult.Cancel)
            {
                hinhBenhNhanStr = customerOpenFileDialog.FileName;
                loadImageCapture(hinhBenhNhanStr);
                hinhBenhNhanStr = "";
            }
            
        }

        private Image resizeImage(Image imgToResize, Size size)
        {
            return (Image)(new Bitmap(imgToResize, size));
        }
        private DataGridViewImageCell loadImage()
        {
            try
            {
                Image image = ptCusImage.Image;
                DataGridViewImageCell imageCell = new DataGridViewImageCell();
                Image imagedis = resizeImage(image, new Size(200,150));
                imageCell.Value = imagedis;
                image.Dispose();
                return imageCell;
            }
            catch
            {
                return new DataGridViewImageCell();
            }
        }

        private void AddRowMoto()
        {
            int i = dtgMotos.Rows.Add();
            dtgMotos.Rows[i].Cells[0].Value = i + 1;
            dtgMotos.Rows[i].Cells[1].Value = txtChuSoHuu.Text;
            dtgMotos.Rows[i].Cells[2].Value = txtSoXe.Text;
            dtgMotos.Rows[i].Cells[3].Value = txtSoKhung.Text;
            dtgMotos.Rows[i].Cells[4].Value = txtSoMay.Text;

            txtChuSoHuu.Text = "";
            txtSoMay.Text = "";
            txtSoXe.Text = "";
            txtSoKhung.Text = "";
        }

        private void AddRow()
        {
            int i = dtgCustomer.Rows.Add();
            dtgCustomer.Rows[i].Cells[0] = loadImage();
            dtgCustomer.Rows[i].Cells[1].Value = txtFullName.Text;
            dtgCustomer.Rows[i].Cells[2].Value = txtBirthday.Text;
            dtgCustomer.Rows[i].Cells[3].Value = rdoMale.Checked ? "Nam" : "Nữ";
            dtgCustomer.Rows[i].Cells[4].Value = rdoMale.Checked ? "M" : "F";
            dtgCustomer.Rows[i].Cells[5].Value = txtPhone.Text;
            dtgCustomer.Rows[i].Cells[6].Value = txtIdCard.Text;
            dtgCustomer.Rows[i].Cells[7].Value = txtIssuDate.Text;
            dtgCustomer.Rows[i].Cells[8].Value = txtIssuePlace.Text;
            dtgCustomer.Rows[i].Cells[9].Value = txtAdress.Text;

            ptCusImage.Image = null;
            txtFullName.Text = "";
            rdoMale.Checked = true;
            txtPhone.Text = "";
            txtIdCard.Text = "";
            dtpIssueDate.Value = DateTime.Now;
            dtpDayOfBirth.Value = DateTime.Now;
            txtAdress.Text = "";
            txtBirthday.Text = "";
            txtIssuDate.Text = "";
            txtIssuePlace.Text = "";
        }


        private void btnAdd_Click(object sender, EventArgs e)
        {
            AddRow();
        }

        private bool validate()
        {
            StringBuilder strBuilder = new StringBuilder();
            bool flg = false;
            int i = 1;
            if (string.IsNullOrWhiteSpace(txtDonGiaPhong.Text))
            {
                flg = true;
                strBuilder.Append(i.ToString() + ". Vui lòng nhập đơn giá phòng.");
                i++;
            }

            DateTime day;
            if (!DateTime.TryParseExact(txtNgayThue.Text, "dd/MM/yyyy", null, System.Globalization.DateTimeStyles.None, out day))
            {
                if (flg)
                {
                    strBuilder.Append("\n");
                }
                strBuilder.Append(i.ToString() + ". Vui lòng nhập ngày thuê phòng.");
                flg = true;
                i++;
            }

            if (!DateTime.TryParseExact(txtStartDate.Text, "dd/MM/yyyy", null, System.Globalization.DateTimeStyles.None, out day))
            {
                if (flg)
                {
                    strBuilder.Append("\n");
                }
                strBuilder.Append(i.ToString() + ". Vui lòng nhập ngày khách vào ở.");
                flg = true;
                i++;
            }


            if (string.IsNullOrWhiteSpace(txtChiSoDien.Text))
            {
                if (flg)
                {
                    strBuilder.Append("\n");
                }
                strBuilder.Append(i.ToString() + ". Vui lòng nhập chỉ số điện.");
                flg = true;
                i++;
            }
            if (string.IsNullOrWhiteSpace(txtChiSoNuoc.Text))
            {
                if (flg)
                {
                    strBuilder.Append("\n");
                }
                strBuilder.Append(i.ToString() + ". Vui lòng nhập chỉ số nước.");
                flg = true;
                i++;
            }
            if (string.IsNullOrWhiteSpace(txtTienDacCoc.Text))
            {
                if (flg)
                {
                    strBuilder.Append("\n");
                }
                strBuilder.Append(i.ToString() + ". Vui lòng nhập tiền đặt cọc.");
                flg = true;
                i++;
            }
            if (dtgCustomer.RowCount <= 0)
            {
                if (flg)
                {
                    strBuilder.Append("\n");
                }
                strBuilder.Append(i.ToString() + ". Vui lòng nhập thông tin người thuê phòng.");
                flg = true;
                i++;
            }

            if (cbxRoom.SelectedIndex < 0)
            {
                if (flg)
                {
                    strBuilder.Append("\n");
                }
                strBuilder.Append(i.ToString() + ". Vui lòng chọn phòng.");
                flg = true;
            }
            if (!string.IsNullOrEmpty(strBuilder.ToString()))
            {
                Error er = new Error(strBuilder.ToString());
                er.ShowDialog();
                er.Dispose();
            }
            
            return !flg;
        }

        private void btnSave_Click(object sender, EventArgs e)
        {
            if (validate())
            {
                ThuePhongDao dao = new ThuePhongDao();
                if (dao.ThuePhong(int.Parse(cbxRoom.SelectedValue.ToString()),
                    float.Parse(txtDonGiaPhong.Text),
                    DateTime.ParseExact(txtNgayThue.Text, "dd/MM/yyyy", null, System.Globalization.DateTimeStyles.None),
                    DateTime.ParseExact(txtStartDate.Text, "dd/MM/yyyy", null, System.Globalization.DateTimeStyles.None),
                    float.Parse(txtChiSoNuoc.Text),
                    float.Parse(txtChiSoDien.Text),
                    float.Parse(txtTienDacCoc.Text),
                    float.Parse(txtDonGiaPhong.Text) * (float)nbSoThang.Value,
                    (int)nbSoThang.Value,
                    getRoomer(),getMotoes()))
                {
                    Result re = new Result("Lưu thuê phòng thành công.");
                    re.ShowDialog();
                    re.Dispose();
                    txtTotal.Text = "";
                    txtTienDacCoc.Text = "";
                    txtStartDate.Text = DateTime.Now.ToString("dd/MM/yyyy");
                    txtNgayThue.Text = DateTime.Now.ToString("dd/MM/yyyy");
                    txtChiSoDien.Text = "";
                    txtChiSoNuoc.Text = "";
                    txtDonGiaPhong.Text = "";
                    dtgCustomer.Rows.Clear();
                    dtgMotos.Rows.Clear();
                }else
                {
                    Error errF = new Error("Lưu thất bại");
                    errF.ShowDialog();
                    errF.Dispose();
                }
            }
        }

        private bool checkMotInformation()
        {
            StringBuilder strBuilder = new StringBuilder();
            bool flg = false;
            int i = 1; 
            if (string.IsNullOrWhiteSpace(txtSoXe.Text))
            {
                flg = true;
                strBuilder.Append(i.ToString() + ". Vui lòng nhập biển số xe.");
                i++;
            }

            if (string.IsNullOrWhiteSpace(txtSoMay.Text))
            {
                if (flg)
                {
                    strBuilder.Append("\n");
                }
                strBuilder.Append(i.ToString() + ". Vui lòng nhập số máy.");
                flg = true;
                i++;
            }

            if (string.IsNullOrWhiteSpace(txtSoKhung.Text))
            {
                if (flg)
                {
                    strBuilder.Append("\n");
                }
                strBuilder.Append(i.ToString() + ". Vui lòng nhập số khung.");
                flg = true;
                i++;
            }

            if (string.IsNullOrWhiteSpace(txtChuSoHuu.Text))
            {
                if (flg)
                {
                    strBuilder.Append("\n");
                }
                strBuilder.Append(i.ToString() + ". Vui lòng nhập tên chủ sở hữu.");
                flg = true;
                i++;
            }
            if (!string.IsNullOrEmpty(strBuilder.ToString()))
            {
                Error er = new Error(strBuilder.ToString());
                er.ShowDialog();
                er.Dispose();
            }
            return !flg;
        }

        private bool checkInforOfMEmbers()
        {
            StringBuilder strBuilder = new StringBuilder();
            bool flg = false;
            int i = 1;
            DateTime day;
            if (string.IsNullOrWhiteSpace(txtFullName.Text))
            {
                flg = true;
                strBuilder.Append(i.ToString() + ". Vui lòng nhập tên khách thuê phòng.");
                i++;
            }

            if (string.IsNullOrWhiteSpace(txtBirthday.Text))
            {
                if (flg)
                {
                    strBuilder.Append("\n");
                }
                strBuilder.Append(i.ToString() + ". Vui lòng nhập ngày tháng năm sinh của khách thuê.");
                flg = true;
                i++;
            }
            else
            {
                if (!DateTime.TryParseExact(txtBirthday.Text, "dd/MM/yyyy", null, System.Globalization.DateTimeStyles.None, out day))
                {
                    if (flg)
                    {
                        strBuilder.Append("\n");
                    }
                    strBuilder.Append(i.ToString() + ". Định dạng ngày sinh không đúng.");
                    flg = true;
                    i++;
                }
            }

            

            if (string.IsNullOrWhiteSpace(txtAdress.Text))
            {
                if (flg)
                {
                    strBuilder.Append("\n");
                }
                strBuilder.Append(i.ToString() + ". Vui lòng nhập địa chỉ của khách thuê.");
                flg = true;
                i++;
            }
            

            if (ptCusImage.Image == null)
            {
                if (flg)
                {
                    strBuilder.Append("\n");
                }
                strBuilder.Append(i.ToString() + ". Vui lòng chụp hình khách thuê.");
                flg = true;
                i++;
            }

            if (!string.IsNullOrWhiteSpace(txtIssuDate.Text))
            {
                if (!DateTime.TryParseExact(txtIssuDate.Text, "dd/MM/yyyy", null, System.Globalization.DateTimeStyles.None, out day))
                {
                    if (flg)
                    {
                        strBuilder.Append("\n");
                    }
                    strBuilder.Append(i.ToString() + ". Định dạng ngày cấp CMND không đúng.");
                    flg = true;
                    i++;
                }
                else
                {
                    if (string.IsNullOrWhiteSpace(txtIssuePlace.Text))
                    {
                        if (flg)
                        {
                            strBuilder.Append("\n");
                        }
                        strBuilder.Append(i.ToString() + ". Vui lòng nhập nơi cấp chứng minh nhân dân.");
                        flg = true;
                        i++;
                    }
                }
            }
            if (!string.IsNullOrEmpty(strBuilder.ToString()))
            {
                Error er = new Error(strBuilder.ToString());
                er.ShowDialog();
                er.Dispose();
            }
            return !flg;
        }
        private void btnAdd1_Click(object sender, EventArgs e)
        {
            if (checkInforOfMEmbers())
            {
                AddRow();
            }
        }

        private void txtFullName_TextChanged(object sender, EventArgs e)
        {

        }

        private void ss_SelectedIndexChanged(object sender, EventArgs e)
        {
            
        }

        private void btnAddMoto_Click(object sender, EventArgs e)
        {
            if (checkMotInformation())
            {
                AddRowMoto();
            }
        }

        private List<Moto> getMotoes()
        {
            if (dtgMotos.RowCount <= 0)
            {
                return null;
            }
            List<Moto> thelist = new List<Moto>();
            Moto moto;
            for(int i =0; i< dtgMotos.RowCount; i++)
            {
                moto = new Moto();
                moto.TenChuSoHuu = dtgMotos.Rows[i].Cells[1].Value.ToString();
                moto.SoXe = dtgMotos.Rows[i].Cells[2].Value.ToString();
                moto.SoKhung = dtgMotos.Rows[i].Cells[3].Value.ToString();
                moto.SoMay = dtgMotos.Rows[i].Cells[4].Value.ToString();
                thelist.Add(moto);
            }
            return thelist;
        }
        private List<Roomer> getRoomer()
        {
            if (dtgCustomer.RowCount <= 0)
            {
                return null;
            }
            Image image = null;
            List<Roomer> thelist = new List<Roomer>();
            Roomer roomer = null;
            DateTime day;
            for (int i = 0; i < dtgCustomer.RowCount; i++)
            {
                roomer = new Roomer();
                image = (Image)dtgCustomer.Rows[i].Cells[0].Value;
                roomer.Image = image;
                roomer.TenKH = dtgCustomer.Rows[i].Cells[1].Value.ToString();
                if (DateTime.TryParseExact(dtgCustomer.Rows[i].Cells[2].Value.ToString(), "dd/MM/yyyy", null, System.Globalization.DateTimeStyles.None, out day))
                {
                    roomer.BirthDay = day;
                }
                roomer.GioiTinh = dtgCustomer.Rows[i].Cells[4].Value.ToString();
                roomer.SoDt = dtgCustomer.Rows[i].Cells[5].Value.ToString();
                roomer.SoCM = dtgCustomer.Rows[i].Cells[6].Value.ToString();
                if (DateTime.TryParseExact(dtgCustomer.Rows[i].Cells[7].Value.ToString(), "dd/MM/yyyy", null, System.Globalization.DateTimeStyles.None, out day))
                {
                    roomer.NgayCap = day;
                }
                roomer.NoiCap = dtgCustomer.Rows[i].Cells[8].Value.ToString();
                roomer.DiaChi = dtgCustomer.Rows[i].Cells[9].Value.ToString();
                roomer.PathHinhAnh = SqlHelper.readConfigFile("Image Folder");
                if (i == 0)
                {
                    roomer.Level = 1;
                }
                else
                {
                    roomer.Level = 2;
                }
                thelist.Add(roomer);
            }
            return thelist;

        }

        private String RemoveComma(String value)
        {
            if (value != null && value.Contains(","))
            {
                value = value.Replace(",", String.Empty).Trim();
            }
            return value;
        }

        private void dtpDayOfBirth_ValueChanged(object sender, EventArgs e)
        {
            txtBirthday.Text = dtpDayOfBirth.Value.ToString("dd/MM/yyyy");
        }

        private void dtpIssueDate_ValueChanged(object sender, EventArgs e)
        {
            txtIssuDate.Text = dtpIssueDate.Value.ToString("dd/MM/yyyy");                
        }

        private void txtTienDacCoc_TextChanged(object sender, EventArgs e)
        {
            if (RemoveComma(txtTienDacCoc.Text).Length > 3)
            {
                txtTienDacCoc.Text = decimal.Parse(RemoveComma(txtTienDacCoc.Text)).ToString("#,###");
                txtTienDacCoc.Select(txtTienDacCoc.Text.Length, 0);
            }
            Count();
        }

        private void txtTienDacCoc_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar))
            {
                e.Handled = true;
            }
        }

        private void txtChiSoDien_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar))
            {
                e.Handled = true;
            }
        }

        private void txtChiSoNuoc_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar))
            {
                e.Handled = true;
            }
        }

        private void txtDonGiaPhong_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar))
            {
                e.Handled = true;
            }
        }

        private void dtpStartDate_ValueChanged(object sender, EventArgs e)
        {
            txtStartDate.Text = dtpStartDate.Value.ToString("dd/MM/yyyy");
        }

        private void txtChiSoDien_TextChanged(object sender, EventArgs e)
        {
            if (RemoveComma(txtChiSoDien.Text).Length > 3)
            {
                txtChiSoDien.Text = decimal.Parse(RemoveComma(txtChiSoDien.Text)).ToString("#,###");
                txtChiSoDien.Select(txtChiSoDien.Text.Length, 0);
            }
        }

        private void txtChiSoNuoc_TextChanged(object sender, EventArgs e)
        {
            if (RemoveComma(txtChiSoNuoc.Text).Length > 3)
            {
                txtChiSoNuoc.Text = decimal.Parse(RemoveComma(txtChiSoNuoc.Text)).ToString("#,###");
                txtChiSoNuoc.Select(txtChiSoNuoc.Text.Length, 0);
            }
        }

        private void txtDonGiaPhong_TextChanged(object sender, EventArgs e)
        {
            if (RemoveComma(txtDonGiaPhong.Text).Length > 3)
            {
                txtDonGiaPhong.Text = decimal.Parse(RemoveComma(txtDonGiaPhong.Text)).ToString("#,###");
                txtDonGiaPhong.Select(txtDonGiaPhong.Text.Length, 0);
            }
            Count();
        }

        private void dtpNgayThue_ValueChanged(object sender, EventArgs e)
        {
            txtNgayThue.Text = dtpNgayThue.Value.ToString("dd/MM/yyyy");
        }


        private void cbxRoom_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (cbxRoom.SelectedIndex >= 0)
            {
                float roomPrice = 0;
                int roomID = 0;
                if (int.TryParse(cbxRoom.SelectedValue.ToString(), out roomID))
                {
                    string condition = "ID = " + roomID;
                    DataRow[] rows = RoomTable.Select(condition);
                    if (rows != null && rows.Length > 0)
                    {
                        DataRow row = rows[0];
                        if (float.TryParse(row["DON_GIA"].ToString(), out roomPrice))
                        {
                            txtDonGiaPhong.Text = roomPrice.ToString("#,###.##");
                        }
                    }
                }
            }
        }

        private void nbSoThang_ValueChanged(object sender, EventArgs e)
        {
            Count();
        }
        
    }
}
